CORS VULNERABILITY

CORS Nedir?

CORS(Cross-Origin Resource Sharing), bir web sitesinde farklı kaynakları da kullanabilmesi için CORS kullanması gerekir. Yani bu bir web sitesinin başka bir web sitesinden resim-dosya çekmesi olabilir veya bir web sitesinin kendi kaynağından bilgi çekmesi olabilir. Örnek olarak bir alışveriş sitesi ürün fiyatı hakkında kullanıcıya sepet bölümünde de gösteriyor işte tam burada CORS kullanıyor diyebiliriz. Web siteleri bu kaynak paylaşımının verimli çalışması adına biraz daha güvensiz bi hale getirebilir ve  düzgün yapılandırılmadığı durumlarda manipüle durumları ortaya çıkıyor.

 

CORS Zafiyeti Nasıl Tespit Edilir?

Bu zafiyeti başka bir kaynaktan iletişim kuran parametre-paket manipüle ederek yapabiliriz. Örnek olarak bir alışveriş sitesinin ödeme bölümündeki http paketinde product_price=100 şeklinde bir parametre gördük yani fiyatı 100 tl biz bu parametreyi 1 şeklinde deneyerek fiyatını düşürebilirsek CORS zafiyetine küçük bir örnek diyebiliriz. Daha etkili bir örnek verelim bir pakette farklı bir kaynaktan bir dosya kullanıyor hatta örnek verelim:

GET /2000.html HTTP/1.1

Host: zafiyetlisite.com

Origin: https://www.w3schools.com

Cookie: sessionid=...

 

Üsteki isteğe göre zafiyetli site w3schools.com dan bir html dosyası alıyo ve kullanıyor saldırgan bu paketi manipüle edebilir. Yani saldırganın göndereceği paket aşağıdaki gibi olabilir.

 

 

 

GET /saldırganin-dosyası HTTP/1.1

Host: vulnerable-website.com

Origin: https://saldirganinsitesi.com

Cookie: sessionid=...

 

Şeklinde zafiyet tespit edilebilir ve saldırılabilir. 

Şimdi PortSwigger üzerinde bu zafiyeti inceleyelim.

Burada bize CORS hassasiyeti bulunduğu ve  adminin api anahtarına ulaşmamız istenmiş.

Labaratuvara bağlandıktan sonra hesaba wiener peter olarak giriş yapıyoruz.

http paketlerden bize hesap bilgilerini dönen sayfayı buluyoruz ve CORS zafiyetinin varlığını tespit etmemiz gerekiyor.

Yukarıdaki paket normal üzerinde herhangi bir oynama yapılmamış paket.

Biz bu paketi manipüle etmeye çalışacağız.

Gördüğümüz gibi zafiyet tespiti yaptık şimdi exploit server üzerinde javascript kodları çalıştırarak bir get isteği oluşturacağız ve administrator api key’ini çalmaya çalışacağız.

Store > Deliver exploit to victim diyoruz ve Access log kayıtlarından exploit servere gelen log kayıtlarından gelen veriyi decoder ile daha düzenli göreceğiz.

 

Ve api keyi labaratuvara submit ediyoruz.

 

 

Bir başka labaratuvara bakalım:

Aynı şekilde /accountDetails sayfasında  kullanıcı bilgileri  ile ilgili BurpSuite üzerinde  response da bir paket görüyoruz.

Yukarıdaki paketi manipüle ederek zafiyet tespiti yapacağız.

Zafiyeti tespit ettik şimdi exploit server üzerinde bir kod çalıştırarak zafiyetli sayfadan bilgi çekmeye çalışacağız.

Yukarıdaki gibi bir script çalıştırıyoruz. Store > Deliver exploit to victim diyoruz.

Ve Access log bölümünde log kayıtlarını inceleyeceğiz.

Yukarıdaki log kayıtını url decoding yaparak Decoder üzerinde admin keyinin daha rahat görebileceğiz.

Apikey’i Submit ediyoruz ve labaratuvarı tamamlamış oluyoruz.

 

 

Peki Gerçek Web Sitelerinde de Laboratuvarlardaki Gibi Çıkar Mı?

Evet bu mümkün, exploit server kullanmadan da raporlamamız ve kabul edilmesi mümkündür. Dikkat etmemiz gereken yer BurpSuite paketinde  Access kontrolde kabul etmiş mi ve bir mesaj veya id görebiliyor muyuz? Eğer BurpSuite Collabrator kullanıyorsak buradan da log kayıtlarını incelememiz mümkün. Ek olarak bir web sitesinde yapılandırma eksikliği olabilir. Yani https://www.youtbe.com/">https://www.youtbe.com şeklinde Origin’de bulunması gerekiyor olabilir. Bunu da https://test.com/(https:/www.youtube.com">https://alperencoskun.com/(https://www.youtube.com gibi bir çok şekilde bypass etmemiz mümkün.

 

 

Aşağıda Birkaç CORS Örnek Raporlarını Bulabilirsiniz:

https://hackerone.com/reports/335330">https://hackerone.com/reports/335330           (2. maddesi)